<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 一\symbol类型 是基础数据类型之一
    理解为:类似ID -->

    <!-- 创建Symbol,需要通过Symbol函数 -->

    <!-- 在symbol函数中参数,是对变量的描述,程序无法访问的,只能通过打印 -->
    <!-- <script>
        let s=Symbol();
        console.log(s);//Symbol()
        console.log(typeof s);//symbol
        Symbol("s!")
    </script> -->

    <!-- 创建2个symbol类型的变量,验证独一无二 -->
    <script>
        // let s1=Symbol();
        // let s2=Symbol();
        // console.log(s1===s2);//false
    </script>

    <!-- Symbol类型的变量无法进行隐式及转换,需要提前显示转换匹配的类型 -->
    <script>
        // let s=Symbol();
        // console.log(s.toString()+"变量");//Symbol()变量
        // console.log(String(s)+"变量");//Symbol()变量
        // console.log(!s);//false
    </script>

    <!-- 举例子 -->
    <!-- 重名的属性不报错,被覆盖 -->
    <!-- 拼装的属性名,也会被覆盖 -->
    <script>
        // let obj={
        //     name:"sizhooupeiqin",
        //     name:"chouyangye"
        // }
        // console.log(obj);

        // let x="Name",y="Name";
        // let obj={
        //     ["user" +x]:"sizhooupeiqin",
        //     ["user" +y]:"chouyangye",
        // }
        // console.log(obj);

        // let name=Symbol('name');
        // let obj={
        //     [name]:"fewef",
        // }
        // console.log(obj);


        // let x=Symbol();
        // let y=Symbol();
        // let obj={
        //     [x]:"aa",
        //     [y]:"bb"
        // }
        // console.log(obj);

        // 方法名也可以使用symbol
        let fn=Symbol("fn");
        let obj={
            [fn](){
                return 'fn'
            }
        }
        console.log(obj);
    </script>
</body>
</html>